import unittest
from app import app
from werkzeug import generate_password_hash


class TestCase(unittest.TestCase):
    """
    TestCase, utilizamos esta clase para realizar las pruebas de nuestra aplicacion SAP
    """
    
    def setUp(self):
        """
        Se llama a este metodo antes de iniciar el test de la aplicacion
        , este metodo crea un nuevo cliente de prueba.
        Se especifican las acciones a ser tomadas antes de iniciar el test
        """
        
        print "Iniciando test"
        #self.db_fd, app.config['DATABASE'] = tempfile.mkstemp()
        self.app = app.test_client()
       

    def tearDown(self):
        """
        Se llama a este metodo al terminar el test el test de la aplicacion,
        en el se especifican las acciones a ser tomadas al finalizar el test
        """
        
        #os.close(self.db_fd)
        #os.unlink(DATABASE)
        print "Terminando test"


    def test_get_login_page(self):
        """
        Este metodo realiza el test de obtencion de la pagina de login de la aplicacion
        """
        
        print "Test get login page"
        rv = self.app.get('/acceso/login/')
        #print rv.data
        print rv._status
        self.assertEqual(rv._status, '200 OK')
        
        
    def test_get_ingresar_usuario_page(self):
        """
        Este metodo realiza el test de obtencion de la pagina ingresar_usuario de la
        aplicacion
        """
        
        print "Test get ingresar usuario page"
        rv = self.app.get('/acceso/usuario/')
        print rv._status
        self.assertEqual(rv._status, '200 OK')
        
        
    #def test_get_cambiar_contrasenha_page(self):
        #"""
        #Este metodo realiza el test de obtencion de la pagina cambiar_contrasenha de la
        #aplicacion
        #"""
        
        #print "Test get cambiar de contrasenha page"
        #rv = self.app.get('/acceso/contrasenha/<nombre>/')
        #print rv._status
        #self.assertEqual(rv._status, '200 OK')
    
    
    def login(self, nombre, contrasenha):
        """
        Este metodo realiza el test de ingreso a la pagina login de la aplicacion, recibe
        como parametros el nombre de usuario y la contrasenha
        """
        
        print "Test de login"
        return self.app.post('/acceso/login/', data=dict(
            nombre=nombre,
            contrasenha=contrasenha
            ), follow_redirects=True)


    def test_datos_login(self):
        """
        Este metodo realiza el test de ingreso de datos a la pagina login de la aplicacion
        """
        
        print "Test de ingreso de datos del login"
        rv = self.login('usu_1', generate_password_hash('usu_1'))
        print rv._status
        self.assertEqual(rv._status, '200 OK')
        
        
    #def ingresar_usuario(self, nombre):
    #    """
    #    Este metodo realiza el test de ingreso a la pagina ingresar_usuario de la aplicacion,
    #    recibe como parametros el nombre de usuario
    #    """
        
    #    print "Test de ingresar_usuario"
    #    return self.app.post('/acceso/usuario/', data=dict(
    #        nombre=nombre,
    #        ))
     
     
    #def test_datos_ingresar_usuario(self):
    #    """
    #    Este metodo realiza el test de ingreso de datos a la pagina ingresar_usuario de la
    #    aplicacion
    #    """
        
    #    print "Test de ingreso de datos para ingresar_usuario"
    #    rv = self.ingresar_usuario('admin')
    #    print rv._status
    #    self.assertEqual(rv._status, '200 OK')
        
    
    def test_get_elegir_proyecto_page(self):
        self.test_datos_login()
        #print rv._status
        print "Test get elegir proyecto page"
        rv = self.app.get('/acceso/proyecto/')
        print rv._status 
        self.assertEqual(rv._status, '200 OK')
        
    
    def elegir_proyecto(self, proyecto):
        """
        Este metodo realiza el test de ingreso de datos a la pagina elegir proyecto de la aplicacion,
        :param usuario:
        Usuario que debe decidir entre los proyectos que sea miembro
        """
        
        print "Test de login"
        return self.app.post('/acceso/proyecto/', data=dict(
            proyectos = proyecto
            ), follow_redirects=True)
      
        
    def test_datos_elegir_proyecto(self):
        """
        Este metodo realiza el test de ingreso de datos a la pagina elegir_proyecto de la
        aplicacion
        """
        
        print "Test de ingreso de datos para elegir_proyecto"
        rv = self.elegir_proyecto('1')
        print rv._status
        print rv
        self.assertEqual(rv._status, '200 OK')
        
    
    #def test_get_pagina_principal_page(self):
        #self.test_datos_login()
        #print rv._status
        #print "Test get elegir proyecto page"
        #rv = self.app.get('/acceso/sap/')
        #print rv._status 
        #self.assertEqual(rv._status, '200 OK')
    
    #def ingresar_contrasenha(self, respuesta, contrasenha, confirm):
    #    """
    #    Este metodo realiza el test de ingreso a la pagina ingresar_contrasenha de la
    #    aplicacion, recibe como parametros una respuesta, una contrasenha y una repeticion
    #    de la contrasenha
    #    """
        
    #    print "Test de ingresar_contrasenha"
    #    return self.app.post('/acceso/contrasenha/<nombre>/', data=dict(
    #    respuesta=respuesta, contrasenha=contrasenha, confirm=confirm
    #    ))
        
        
    #def test_datos_ingresar_contrasenha(self):
    #    """
    #    Este metodo realiza el test de ingreso de datos a la pagina ingresar_contrasenha de
    #    la aplicacion
    #    """
        
    #    print "Test de ingreso de datos para ingresar_contrasenha"
    #    rv = self.ingresar_contrasenha('azul',generate_password_hash('ad'), 
    #                                generate_password_hash('ad') )
    #    print rv._status
    #    self.assertEqual(rv._status, '200 OK')
    
        
if __name__ == '__main__':
    unittest.main()